home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 076-100 / disk_096 / animplayer / xordltashort.c < prev   
C/C++ Source or Header  |  1992-05-06  |  2KB  |  76 lines

  1. /***************************************************************************
  2.  *
  3.  *   NAME 
  4.  *      XORDLTAshort -- unpack an animation frame
  5.  *
  6.  *   SYNOPSIS
  7.  *      XORDLTAshort( bm, deltaword );
  8.  * 
  9.  *      struct BitMap *bm;
  10.  *      UWORD *deltaword;
  11.  *
  12.  *   DESCRIPTION
  13.  *    Uses the ANIM XOR, offset/number, vertical compression technique
  14.  *      for unpacking animation frames.
  15.  *
  16.  *      copyright (c) 1987 Martin D. Hash
  17.  *
  18.  *   LAST EDITED
  19.  *      Martin Hash              23 Aug 1987
  20.  *
  21.  *   EDIT HISTORY
  22.  *      22 Mar 1987  MH  Created.
  23.  *      16 Aug          ANIM standard.
  24.  *
  25.  **********************************************************************/
  26.  
  27. #include <exec/types.h>
  28. #include <intuition/intuition.h>
  29. #include "df1:ANIMCons.h"
  30.  
  31. /* FUNCTION */
  32.  
  33. int XORDLTAshort( bm, deltaword )
  34.  
  35. struct BitMap *bm;
  36. UWORD *deltaword;
  37. {
  38.    /* LOCAL VARIABLES */
  39.  
  40.    int i;
  41.    LONG *deltadata;
  42.    register WORD *ptr, *planeptr;
  43.    register int s, size, nw;
  44.    register WORD *data, *dest;
  45.  
  46.    /* CODE */
  47.    
  48.    deltadata = (LONG *)deltaword;
  49.    nw = bm->BytesPerRow >>1;
  50.  
  51.    for (i = 0; i < bm->Depth; i++) {
  52.       planeptr = (WORD *)(bm->Planes[i]);
  53.       data = deltaword + deltadata[i];
  54.       ptr  = deltaword + deltadata[i+8];
  55.       while (*ptr != -1) {
  56.          dest = planeptr + *ptr++;
  57.          size = *ptr++;
  58.          if (size < 0) {
  59.         for (s = size; s < 0; s++) {
  60.            *dest ^= *data;
  61.            dest += nw;
  62.         }
  63.             data++;
  64.          }
  65.      else {
  66.         for (s = 0; s < size; s++) {
  67.            *dest ^= *data++;
  68.            dest += nw;
  69.             }
  70.          }
  71.       }
  72.    }
  73.    return(0);
  74. }
  75.  
  76.